package com.smart.community.region.dto;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 移动端业主详情DTO
 * 专为移动端业主信息完善页面设计，包含完整的业主信息和关联房户信息
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 1.0.0
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class OwnerMobileDetailDTO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /**
     * 业主ID
     */
    private Long id;
    
    /**
     * 用户ID
     */
    private Long userId;
    
    /**
     * 业主姓名
     */
    private String ownerName;
    
    /**
     * 身份证号（原始数据，不脱敏）
     */
    private String idCard;
    
    /**
     * 联系电话（原始数据，不脱敏）
     */
    private String phone;
    
    /**
     * 邮箱地址
     */
    private String email;
    
    /**
     * 性别：0-未知，1-男，2-女
     */
    private Integer gender;
    
    /**
     * 性别描述
     */
    private String genderDesc;
    
    /**
     * 出生日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate birthDate;
    
    /**
     * 联系地址
     */
    private String address;
    
    /**
     * 职业
     */
    private String occupation;
    
    /**
     * 工作单位
     */
    private String company;
    
    /**
     * 紧急联系人
     */
    private String emergencyContact;
    
    /**
     * 紧急联系电话（原始数据，不脱敏）
     */
    private String emergencyPhone;
    
    /**
     * 备注信息
     */
    private String remark;
    
    /**
     * 状态：0-禁用，1-启用
     */
    private Integer status;
    
    /**
     * 状态描述
     */
    private String statusDesc;
    
    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    /**
     * 关联房户列表
     */
    private List<OwnerHouseholdMobileDTO> householdList;
    
    /**
     * 获取性别描述
     */
    public String getGenderDesc() {
        if (gender == null) {
            return "未知";
        }
        switch (gender) {
            case 1:
                return "男";
            case 2:
                return "女";
            default:
                return "未知";
        }
    }
    
    /**
     * 获取状态描述
     */
    public String getStatusDesc() {
        if (status == null) {
            return "未知";
        }
        switch (status) {
            case 0:
                return "禁用";
            case 1:
                return "启用";
            default:
                return "未知";
        }
    }
    
    /**
     * 移动端业主房户关联DTO
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class OwnerHouseholdMobileDTO implements Serializable {
        
        private static final long serialVersionUID = 1L;
        
        /**
         * 关联ID
         */
        private Long id;
        
        /**
         * 房户ID
         */
        private Long householdId;
        
        /**
         * 房间号
         */
        private String roomNumber;
        
        /**
         * 小区名称
         */
        private String communityName;
        
        /**
         * 楼栋名称
         */
        private String buildingName;
        
        /**
         * 单元名称
         */
        private String unitName;
        
        /**
         * 产权类型：1-完全产权，2-共有产权，3-部分产权
         */
        private Integer ownershipType;
        
        /**
         * 产权类型描述
         */
        private String ownershipTypeDesc;
        
        /**
         * 产权比例（%）
         */
        private BigDecimal ownershipRatio;
        
        /**
         * 产权开始日期
         */
        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate ownershipStartDate;
        
        /**
         * 产权结束日期（适用于部分产权）
         */
        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate ownershipEndDate;
        
        /**
         * 是否主业主：0-否，1-是
         */
        private Integer isPrimaryOwner;
        
        /**
         * 房产证号
         */
        private String certificateNumber;
        
        /**
         * 房产证日期
         */
        @JsonFormat(pattern = "yyyy-MM-dd")
        private LocalDate certificateDate;
        
        /**
         * 抵押信息
         */
        private String mortgageInfo;
        
        /**
         * 备注信息
         */
        private String remark;
        
        /**
         * 状态：0-禁用，1-启用
         */
        private Integer status;
        
        /**
         * 关联状态：0-待确认，1-已确认，2-已解除
         */
        private Integer associationStatus;
        
        /**
         * 获取产权类型描述
         */
        public String getOwnershipTypeDesc() {
            if (ownershipType == null) {
                return "未知";
            }
            switch (ownershipType) {
                case 1:
                    return "完全产权";
                case 2:
                    return "共有产权";
                case 3:
                    return "部分产权";
                default:
                    return "未知";
            }
        }
    }
}
